LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

AutoGen

2025/2/27 AI

待完成:架构 设计思想 整个代码怎么组织起来的 怎么去满足各种需求
B站牛人UP主【DataSense】
AutoGen 技术博客系列 (一):基础介绍与入门教程这篇博客提供了对 AutoGen 的基础介绍和入门教程,包括核心 - 掘金
AutoGen 智能应用开发(一)|AutoGen 基础_哔哩哔哩_bilibili

[microsoft/autogen: A programming framework for agentic AI 🤖 PyPi: autogen-agentchat Discord: https://aka.ms/autogen-discord Office Hour: https://aka.ms/autogen-officehour] (https://github.com/microsoft/autogen)

概述

AutoGenAutoGen Studio 都是由微软开发的用于创建和管理人工智能(AI)智能体的工具,但它们在功能和目标方面存在一些差异。

AutoGen 是一款基于 AI 和大数据技术的产品设计工具,旨在通过自动提取产品需求、智能优化设计方案并生成最终的产品模型或解决方案。其核心目标是将人工干预降至最低,从而提升用户体验和系统开发效率。AutoGen 是一个开源的 Python 框架,用于定义、配置和组合 AI 代理以构建多智能体应用。它提供了一种用于描述代理行为和它们之间交互的声明性语言。AutoGen 非常灵活,可用于构建各种多智能体应用,但它需要一定的编程技能才能使用。

AutoGen Studio 是一个基于 AutoGen 框架的图形用户界面(GUI)工具。它使开发人员能够更轻松地创建和管理多智能体应用,而无需编写代码。AutoGen Studio 提供了拖放式界面和各种预构建模块,可以简化多智能体应用的开发过程。但是,AutoGen Studio 的灵活性不如 AutoGen,并且它可能不适用于需要高度定制的应用。

以下表格总结了 AutoGen 和 AutoGen Studio 的一些关键区别:

特性 AutoGen AutoGen Studio
类型 框架 GUI 工具
抽象级别 更底层 更高层
灵活度 更灵活 不太灵活
易用性 更难使用 更易使用
编程要求 需要编程技能 无需编程技能
常见用例 高度定制的多智能体应用 通用多智能体应用

总而言之,AutoGen 适合需要高度定制和灵活性的多智能体应用开发人员,而 AutoGen Studio 适合需要快速构建通用多智能体应用的开发人员。

AI + 行业 = Agent

只需要把接口复制粘贴来到AutoGen Studio的技能表
**万能API**:[天聚数行TianAPI - 应用开发者API数据调用平台] (https://www.tianapi.com/)

我们要去给智能体配置上你需要的能力!

我结合智能体我可以做到每个行业 但每个行业都有自己角色的一个定义
我要给智能体定义角色


  1. 技术基础和领域:
    • “AutoGen” 可能依赖于特定的技术,如机器学习算法、自然语言处理模型等,
      主要用于自动化代码生成、文档自动提取或数据分析任务。
    • “AiAgent” 则是人工智能领域的核心概念,涵盖从需求理解到解决方案生成的
      全生命周期管理。它能够将不同领域的需求整合起来,提供综合性的解决方案。
  2. 应用场景:
    • 在“AutoGen”的应用中,可能包括自动化代码生成、文档自动化处理、数据分析
      工具的构建等。
    • 在“AiAgent”的应用中,可能涉及需求分析和理解,数据预处理与清洗,以及生
      成生成模型(如“AutoGen”)中的产品设计生成。
  3. 功能特点:
    • “AutoGen” 可能专注于自动化、快速迭代和标准化能力,适合需要大量重复劳
      动的任务。
    • “AiAgent” 通常结合人工智能的高级算法和分布式系统,能够处理复杂、多领
      域的问题,并提供灵活的解决方案。
  4. 研究方向与应用深度:
    • 在“AutoGen”的研究中,可能侧重于特定任务的具体实现和技术优化。
    • 在“AiAgent”的研究中,可能涉及跨领域的知识融合、分布式计算环境等高级技
      术,推动了AI领域的发展。

全自动化的 AI Agents

LangChain可以实现做AI Agent
XAgent || AutoGen 是更一步进化的

如果有与图片输出相关的,帮忙加一个GenImg(“图片生成提示 Prompt“)
利用Prompt设定可以分配任务到不同的Agent上

AutoGen 是一个框架,支持使用多个代理来开发 LLM 应用程序这些代理可以相互对话来解决任务。AutoGen 代理是可定制的、可对话的,并且无缝地允许人参与其中。他们可以结合 LLM、人工输入和不同工具的各种模式运行。

AutoGen是微软的开源框架

GitHub:microsoft/autogen: A programming framework for agentic AI 🤖 PyPi: autogen-agentchat Discord: https://aka.ms/autogen-discord Office Hour: https://aka.ms/autogen-officehour

文档博客:AutoGen — AutoGen

AutoGen 主要特点

AutoGen 可以轻松构建基于多代理对话的下一代 LLM 应用程序。它简化了复杂的LLM 工作流程的编排、自动化和优化。它最大限度地提高了 LLM 模型的性能并克服了它们的弱点。
它支持复杂工作流程的多种对话模式。借助可定制和可对话的代理,开发人员可以使用 AutoGen 构建各种涉及对话自主性、代理数量和代理对话拓扑的对话模式。
它提供了一系列具有不同复杂性的工作系统。 这些系统涵盖各种领域和复杂性的广泛应用。 这演示了 AutoGen 如何轻松支持不同的对话模式。
AutoGen 提供增强的 LLM 推理。 它提供 API统一和缓存等实用程序,以及错误处理、多配置推理、上下文编程等高级使用模式。

AutoGen 抽象并实现了可对话代理,旨在通过代理间对话来解决任务。
可对话:AutoGen 中的代理是可对话的,这意味着任何代理都可以从其他代理发送和接收消息以发起或继续对话
可定制:AutoGen 中的代理可以定制以集成 LLM、人、工具或它们的组合。


★ PyCharm怎么打开.ipynb后缀文件 我需要详细步骤 我pycharm里面没有这个?

如果 PyCharm 版本较老或者插件不可用,可以用外部 Jupyter Notebook 运行:

  1. 安装 Jupyter

    打开 PyCharm 自带的 Terminal(终端)输入:

    pip install jupyter
    
  2. 在 Terminal 里启动 Jupyter

    jupyter notebook
    
  3. 在浏览器中打开 .ipynb Jupyter Notebook 会在浏览器中打开,你可以在其中编辑 .ipynb 文件。

AutoGen基础环境配置

AutoGen基础环境安装_autogen安装-CSDN博客

windows开始菜单搜索栏,搜索prompt,搜索结果中可以看应用Aanconda Powershell Prompt

接下来,我们将使用这个工具创建一个特定版本的Python环境。
在打开的命令行工具中输入如下命令,然后回车。

conda create -n lcy python=3.10

-n 后面是的lcy是环境的名称,相当于一个标识,后续要用这个环境时通过这个名称进行查找
python=3.10,是指定python的版本

接下来,输入如下命令,切换到创建好的环境。

conda activate lcy

接下来我们需要安装Autogen Studio。
那怎么安装呢?超级简单,在刚刚我们准备好的python环境中执行一个命令就好。

pip install autogen studio

但如果直接这样执行的话,因为它会访问国外的网站完成下载,所以速度非常慢,慢到不能忍受。所以我们需要让它去国内的镜像下载。通过参数-i指定国内镜像地址,我们使用阿里云的镜像。

上述命令就变成如下这样了。

pip install autogenstudio -i https://mirrors.aliyun.com/pypi/simple

下载之后,使用如下命令启动autogen studio服务。

★ (lcy) C:\Users\Pluminary> autogenstudio ui --port 6001

之后直接访问AutoGen Studio [Beta] → [127.0.0.1:6001] (http://127.0.0.1:6001/)

在AutoGen Studio中,Team Builder是一个功能模块,允许用户配置和管理不同的Agents来构建多智能体系统。下面是对您提到的几种Agents的详细分析:

AssistantAgent
  • 用途:AssistantAgent 是一种用于处理和生成对话的智能体。它可以用来创建聊天机器人、虚拟助手或任何需要与用户进行交互的应用程序。
  • 功能
    • 对话生成:能够基于用户的输入生成自然语言响应。
    • 任务执行:可以执行特定的任务,如信息查询、简单计算或执行预设的命令。
    • 上下文管理:保持对话的上下文,使得对话更加连贯和自然。
Web Surfer Agent
  • 用途:Web Surfer Agent 专门用于从互联网上检索信息。它是一个网络爬虫,能够访问网页并提取有用的信息。
  • 功能
    • 网页访问:能够访问指定的网页,获取内容。
    • 信息提取:从网页中提取结构化或非结构化数据。
    • 数据整合:将提取的数据整合到对话或应用程序中。
Verification Assistant
  • 用途:Verification Assistant 用于验证信息的准确性或执行某些检查任务。
  • 功能
    • 数据验证:检查数据的准确性,例如验证用户输入的信息是否符合特定的格式或标准。
    • 逻辑验证:执行逻辑检查,比如验证某个流程是否按照预定的规则执行。
    • 合规性检查:确保操作符合特定的行业或法律标准。
UserProxyAgent
  • 用途:UserProxyAgent 代表用户执行操作,通常用于模拟用户行为或自动化用户任务。
  • 功能
    • 行为模拟:模拟用户的行为,例如在测试环境中模拟用户操作。
    • 任务自动化:自动化重复性的用户任务,提高效率。
    • 隐私保护:在需要保护用户隐私的场景中,代替用户执行操作,减少个人信息泄露的风险。

在Team Builder中,这些Agents可以被配置和组合,以构建复杂的工作流程。例如,一个工作流程可能首先使用Web Surfer Agent从网络上获取信息,然后由AssistantAgent处理这些信息并生成响应,最后由Verification Assistant验证响应的准确性。通过这种方式,AutoGen Studio 提供了一个灵活且强大的平台,用于创建高效且可扩展的多智能体系统。



ConversableAgent 是一个综合性的智能对话系统,它能够提供个性化和高效的交流体验

AssistantAgent(助手代理)

想象一下你有一个智能助手,比如Siri或Alexa,AssistantAgent就像是这个助手的大脑。它的任务是理解和处理用户的请求,然后做出相应的回应。在AutoGen系统中,AssistantAgent负责接收用户的信息,分析这些信息,并根据预设的规则或逻辑来执行任务。比如,如果你告诉助手“我明天有个会议”,AssistantAgent就会帮你设置提醒或者添加到日程中。

UserProxyAgent(用户代理代理)

想象你在玩一个角色扮演游戏,UserProxyAgent就像是你的角色,它代表你在游戏世界中行动。在AutoGen系统中,UserProxyAgent代表用户与系统或其他用户进行交互。它可以是用户的替身,执行用户的命令,或者代表用户参与某些活动。比如,如果你在一个在线论坛上,UserProxyAgent可以帮你发帖或者回复别人的评论。

GroupChatManager(群聊管理器)

想象你在参加一个多人在线会议或群聊,GroupChatManager就像是会议的主持人或者群聊的管理员。它的职责是协调群聊中的所有参与者,确保信息流畅且有序地传递。在AutoGen系统中,GroupChatManager负责管理群聊的各个方面,比如邀请成员加入、监控聊天内容、维持聊天秩序等。如果有人在群聊中发了不合适的内容,GroupChatManager可能会介入处理。


在PyCharm中新建一个基于conda的工程文件
在命令行里输入: pip install pyautogen

本地启动 DeepSeek → C:\Users\Pluminary>ollama run deepseek-r1:1.5b

配置Open WebUI

可以测试模型的问答

先安装conda
conda create -n open-webui python=3.11.0
activate open-webui

# 开源的访问大模型管理页面
pip install open-webui
配置WebUI:启动
open-webui serve
------------------
http://localhost:8080
sentence_bert_config.json: 100%|████████████████████████████████████████████████████████████| 53.0/53.0 [00:00<?, ?B/s]
tokenizer_config.json: 100%|██████████████████████████████████████████████████████████████████| 350/350 [00:00<?, ?B/s]
vocab.txt: 100%|████████████████████████████████████████████████████████████████████| 232k/232k [00:00<00:00, 1.17MB/s]
tokenizer.json: 100%|███████████████████████████████████████████████████████████████| 466k/466k [00:00<00:00, 26.0MB/s]
special_tokens_map.json: 100%|████████████████████████████████████████████████████████████████| 112/112 [00:00<?, ?B/s]
INFO:     Started server process [18264]
INFO:     Waiting for application startup.
2025-02-28 08:29:21.807 | INFO     | open_webui.utils.logger:start_logger:140 - GLOBAL_LOG_LEVEL: INFO - {}

# 等看到端口号再去访问 18264

利用Python部署本地DeepSeek并进行连通

# 用于发送 HTTP 请求。在此代码中,我们使用它与本地部署的 DeepSeek 服务进行通信
import requests
# 用于处理 JSON 数据,尤其是在发送和接收 HTTP 请求时
import json


# 定义与 DeepSeek 服务交互的类
class DeepSeekChat:
    # 这个类负责与 DeepSeek 服务进行交互 它接受两个参数:
    '''
     model:模型名称,在这个案例中是 "deepseek-r1:1.5b"。
     base_url:DeepSeek 服务的 API 基础 URL,即本地部署的 DeepSeek 服务地址。
     
我们通常使用self作为第一个参数的名称。这是为了代码的可读性和一致性。这个约定使得其他阅读你代码的Python程序员能够立即识别出self代表的是类的实例。
    '''
    def __init__(self, model, base_url):
        self.model = model
        self.base_url = base_url

    # send_message 方法:该方法接收一个消息列表 messages
    # 并构建一个 POST 请求的有效负载(payload),包括模型名称和消息内容。messages 是一个包含多条消息的列表。
    def send_message(self, messages):
        # 构建请求数据
        payload = {
            "model": self.model,
            "messages": messages
        }
        # 设置请求头,指定请求体的内容类型为 application/json
        headers = {
            "Content-Type": "application/json"
        }

        # 发送请求到本地 DeepSeek 服务
 '''
使用 requests.post() 发送 HTTP POST 请求到 DeepSeek 服务的 API 地址 self.base_url
json.dumps(payload) 将请求体的负载 payload 转换为 JSON 格式的字符串。
 '''
        response = requests.post(self.base_url, headers=headers, data=json.dumps(payload))

        if response.status_code == 200:
            return response.json()  # 返回 DeepSeek 返回的响应
        else:
            return {"error": f"Request failed with status code {response.status_code}"}


# 定义初始化消息 定义启动对话函数
'''
此函数启动并管理与用户的对话。它定义了一个初始化的 messages 列表,其中包含一个系统消息,系统消息的角色是 "system",内容是 "You are a helpful assistant.",这将告诉模型其应扮演的角色
'''
def start_conversation():
    messages = [
        {"role": "system", "content": "You are a helpful assistant."}  # 系统消息定义角色
    ]

    # 初始化 DeepSeekChat 实例
    deepseek_chat = DeepSeekChat(
        model="deepseek-r1:1.5b",  # 使用的本地模型
        base_url="http://localhost:11434/v1/chat/completions"  # 本地服务 URL
    )
# 创建一个 DeepSeekChat 类的实例 deepseek_chat,并传入本地模型和服务的 URL
    while True:
        try:
            # 获取用户输入问题
            user_input = input("You: ")

            # 如果用户输入 "exit" 退出循环
            # 进入一个 while True 循环,不断等待用户输入
            #用户的每次输入都会被捕获并存储在 user_input 变量中。

            if user_input.lower() == "exit":
                print("Exiting the conversation.")
                break

            # 添加用户消息
             essages.append({"role": "user", "content": user_input})

            # 发送用户消息并获取模型回答 将用户的输入添加到 messages 列表中,消息的角色设置为 "user"。
            response = deepseek_chat.send_message(messages)

            # 检查响应是否包含错误
            if "error" in response:
                print(response["error"])
            else:
                # 打印 DeepSeek 模型的回答
                answer = response.get("choices", [{}])[0].get("message", {}).get("content", "No response")
                print("DeepSeek: " + answer)

        except KeyboardInterrupt:
            print("\nExiting the conversation due to user interrupt.")
            break
'''
if __name__ == "__main__": 语句保证只有当脚本作为主程序执行时才会调用 start_conversation 函数。如果该脚本被作为模块导入到其他脚本中,则不会执行该函数。
'''

if __name__ == "__main__":
    start_conversation()
假设你已经理解了 DeepSeek 的基础代码,下面的例子演示了如何使用 AutoGen 集成 DeepSeek:
import requests
from autogen import Agent, GroupChat, GroupChatManager
from autogen.models.openai import OpenAIChatCompletionClient
import json

# 定义与 DeepSeek 服务交互的类
class DeepSeekChat:
    def __init__(self, model, base_url):
        self.model = model
        self.base_url = base_url

    def send_message(self, messages):
        payload = {
            "model": self.model,
            "messages": messages
        }
        headers = {"Content-Type": "application/json"}
        response = requests.post(self.base_url, headers=headers, data=json.dumps(payload))
        
        if response.status_code == 200:
            return response.json()
        else:
            return {"error": f"Request failed with status code {response.status_code}"}

# 创建自定义代理(DeepSeek 代理)
class DeepSeekAgent(Agent):
    def __init__(self, model, base_url):
        super().__init__(name="DeepSeekAgent")
        self.chat = DeepSeekChat(model, base_url)

    def on_message(self, message):
        response = self.chat.send_message([{"role": "user", "content": message}])
        return response.get("choices", [{}])[0].get("message", {}).get("content", "No response")

# 创建用户代理
class UserAgent(Agent):
    def __init__(self):
        super().__init__(name="UserAgent")

    def on_message(self, message):
        return message

# 设置 DeepSeek 代理
deepseek_agent = DeepSeekAgent(model="deepseek-r1:1.5b", base_url="http://localhost:11434/v1/chat/completions")
user_agent = UserAgent()

# 创建群聊
group_chat = GroupChat(agents=[deepseek_agent, user_agent])
group_chat_manager = GroupChatManager(group_chat)

# 启动对话
def start_conversation():
    while True:
        try:
            user_input = input("You: ")
            if user_input.lower() == "exit":
                print("Exiting the conversation.")
                break
            
            response = group_chat_manager.handle_message(user_input)
            print(f"DeepSeek: {response}")
        
        except KeyboardInterrupt:
            print("\nExiting the conversation due to user interrupt.")
            break

if __name__ == "__main__":
    start_conversation()